Re-enable tests on Jazzy for Windows#1435
Merged
minggangw merged 16 commits intoRobotWebTools:developfrom Mar 17, 2026
Merged
Conversation
There was a problem hiding this comment.
Pull request overview
Updates the Windows CI workflow to handle ROS 2 Jazzy by downloading a specific prebuilt Windows archive and adjusting the build/test steps accordingly.
Changes:
- Adds a matrix
includeentry to supply a Jazzy-specificros_binary_url. - Installs 7-Zip/wget on Jazzy jobs and downloads/extracts the Jazzy Windows binary zip.
- Gates
npm testto run only on Jazzy and switches the test environment setup call.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+18
to
+25
| - rolling | ||
| include: | ||
| - ros_distribution: jazzy | ||
| ros_binary_url: https://github.com/ros2/ros2/releases/download/release-jazzy-20260128/ros2-jazzy-20260128-windows-release-amd64.zip |
Comment on lines
66
to
+71
| - name: Test rclnodejs | ||
| if: ${{ matrix.ros_distribution == 'jazzy' }} | ||
| shell: cmd | ||
| run: | | ||
| set RMW_IMPLEMENTATION=rmw_fastrtps_cpp | ||
| call "c:\dev\${{ matrix.ros_distribution }}\ros2-windows\setup.bat" | ||
| call "c:\dev\jazzy\ros2-windows\local_setup.bat" | ||
| npm test |
| run: | | ||
| set RMW_IMPLEMENTATION=rmw_fastrtps_cpp | ||
| call "c:\dev\${{ matrix.ros_distribution }}\ros2-windows\setup.bat" | ||
| call "c:\dev\jazzy\ros2-windows\local_setup.bat" |
There was a problem hiding this comment.
Pull request overview
This PR updates the project’s Windows CI setup to provision ROS 2 via Pixi, and adjusts several tests to avoid Windows-specific failures/flakiness (plus a small reliability tweak in the Electron usability test).
Changes:
- Skip a handful of tests (or specific cases) when running on
win32. - Refine the Electron usability test flow to prevent repeated shutdown/exit paths.
- Replace the Windows reusable workflow’s ROS setup with a Pixi-based install flow and rename the calling jobs accordingly.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| test/test-type-description-service.js | Skips ROS 2 CLI parameter-based tests on Windows. |
| test/test-serialization.js | Skips one serialization test case on Windows. |
| test/test-rosidl-message-generator.js | Skips runtime message generation tests on Windows. |
| test/test-rate.js | Skips high-frequency sleep accuracy test on Windows. |
| test/test-native-loader.js | Skips one NativeLoader test on Windows. |
| test/electron/test_usability.js | Adds guards/cleanup to avoid duplicate completion paths and stops publishing after success. |
| .github/workflows/windows-push-test.yml | Renames the reusable-workflow job key. |
| .github/workflows/windows-pr-test.yml | Renames the reusable-workflow job key. |
| .github/workflows/windows-build-and-test.yml | Switches Windows CI to Pixi + ZIP-based ROS 2 install; conditionally runs tests per distro. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
23
to
+31
| (msg) => { | ||
| if (msg.data === 'Hello from Electron') { | ||
| if (!testDone && msg.data === 'Hello from Electron') { | ||
| testDone = true; | ||
| console.log( | ||
| 'Successfully received message in Electron environment.' | ||
| ); | ||
| clearInterval(interval); | ||
| rclnodejs.shutdown(); | ||
| app.quit(); | ||
| process.exit(0); | ||
| app.exit(0); |
Comment on lines
67
to
74
| it('customFallbackLoader attempts to require exact match if exists', function () { | ||
| if (process.platform === 'win32') { | ||
| this.skip(); | ||
| } | ||
|
|
||
| Object.defineProperty(process, 'platform', { value: 'linux' }); | ||
| Object.defineProperty(process, 'arch', { value: 'x64' }); | ||
| process.env.ROS_DISTRO = 'humble'; |
Comment on lines
+44
to
+48
| shell: powershell | ||
| run: | | ||
| irm -useb https://pixi.sh/install.ps1 | iex | ||
| $env:Path = [System.Environment]::GetEnvironmentVariable("Path","User") + ";" + [System.Environment]::GetEnvironmentVariable("Path","Machine") | ||
| Write-Host "Pixi installed at: $(where.exe pixi)" |
Comment on lines
+22
to
+31
| include: | ||
| - ros_distribution: jazzy | ||
| ros_zip_url: "https://github.com/ros2/ros2/releases/download/release-jazzy-20260128/ros2-jazzy-20260128-windows-release-amd64.zip" | ||
| run_tests: true | ||
| - ros_distribution: kilted | ||
| ros_zip_url: "https://github.com/ros2/ros2/releases/download/release-kilted-20250728/ros2-kilted-20250728-windows-release-amd64.zip" | ||
| run_tests: false | ||
| - ros_distribution: rolling | ||
| ros_zip_url: "https://github.com/ros2/ros2/releases/download/release-rolling-nightlies/ros2-rolling-nightly-windows-amd64.zip" | ||
| run_tests: false |
minggangw
added a commit
that referenced
this pull request
Mar 17, 2026
Replaces the legacy `setup-ros`-based Windows CI with a unified pixi-based workflow covering Jazzy, Kilted, and Rolling. Removes Humble from Windows CI (EOL distro, `setup-ros` unmaintained). Tests run only on Jazzy; Kilted and Rolling are build-only. Fixes an intermittent Electron test hang on Linux CI caused by async `app.quit()` racing with `process.exit()`. Adds targeted Windows-only test skips for six test cases with platform-specific portability issues. **CI workflow changes:** - `.github/workflows/windows-build-and-test.yml` — Replaced `setup-ros` + `c:\dev\` install path with `prefix-dev/setup-pixi@v0.9.4` + pixi-managed `C:\pixi_ws` layout. Distro matrix changed from `[humble, jazzy, kilted, rolling]` to `[jazzy, kilted, rolling]` with per-distro release zip URLs via `include`. Tests gated by `matrix.run_tests` (true only for Jazzy). Removed stale Foxy-era comment about CycloneDDS workaround. - `.github/workflows/windows-pr-test.yml` — Job renamed `build-and-test` → `pixi-build`. - `.github/workflows/windows-push-test.yml` — Job renamed `build-and-test` → `pixi-build`. **Electron test fix:** - `test/electron/test_usability.js` — Replaced `app.quit()` + `process.exit()` with `app.exit(code)` for immediate synchronous termination, preventing orphan GPU/utility processes from keeping `xvfb-run` pipes open. Added `testDone` guard to prevent double-fire of subscription callback and timeout. Hoisted `interval` declaration above subscription creation to avoid temporal dead zone. Added `clearInterval(interval)` in the success path. **Targeted Windows test skips:** - `test/test-native-loader.js` — Skip `customFallbackLoader attempts to require exact match if exists` on Windows (test overrides `process.platform` to `linux` and probes Ubuntu-specific prebuild paths). - `test/test-rate.js` — Skip `rate sleep accuracy test, 1000 hz for 3 seconds` on Windows (Windows timer resolution ~15ms cannot meet 1kHz threshold). - `test/test-rosidl-message-generator.js` — Skip `Generate message at runtime` on Windows (shells through `bash` + `local_setup.sh`). Skip `Testing mrpt_msgs/msg/GraphSlamAgents` on Windows (`mrpt_msgs` unavailable in Windows Jazzy environment). - `test/test-serialization.js` — Skip `std_msgs/msg/MultiArrayDimension` serialization round-trip on Windows (inconsistent deserialization behavior). - `test/test-type-description-service.js` — Skip `Test type description service configured by parameter` and `Test start_type_description_service parameter value` on Windows (ROS CLI `ros2 param` commands brittle/hanging; main service test unaffected). Fix: #1436
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replaces the legacy
setup-ros-based Windows CI with a unified pixi-based workflow covering Jazzy, Kilted, and Rolling. Removes Humble from Windows CI (EOL distro,setup-rosunmaintained). Tests run only on Jazzy; Kilted and Rolling are build-only. Fixes an intermittent Electron test hang on Linux CI caused by asyncapp.quit()racing withprocess.exit(). Adds targeted Windows-only test skips for six test cases with platform-specific portability issues.CI workflow changes:
.github/workflows/windows-build-and-test.yml— Replacedsetup-ros+c:\dev\install path withprefix-dev/setup-pixi@v0.9.4+ pixi-managedC:\pixi_wslayout. Distro matrix changed from[humble, jazzy, kilted, rolling]to[jazzy, kilted, rolling]with per-distro release zip URLs viainclude. Tests gated bymatrix.run_tests(true only for Jazzy). Removed stale Foxy-era comment about CycloneDDS workaround..github/workflows/windows-pr-test.yml— Job renamedbuild-and-test→pixi-build..github/workflows/windows-push-test.yml— Job renamedbuild-and-test→pixi-build.Electron test fix:
test/electron/test_usability.js— Replacedapp.quit()+process.exit()withapp.exit(code)for immediate synchronous termination, preventing orphan GPU/utility processes from keepingxvfb-runpipes open. AddedtestDoneguard to prevent double-fire of subscription callback and timeout. Hoistedintervaldeclaration above subscription creation to avoid temporal dead zone. AddedclearInterval(interval)in the success path.Targeted Windows test skips:
test/test-native-loader.js— SkipcustomFallbackLoader attempts to require exact match if existson Windows (test overridesprocess.platformtolinuxand probes Ubuntu-specific prebuild paths).test/test-rate.js— Skiprate sleep accuracy test, 1000 hz for 3 secondson Windows (Windows timer resolution ~15ms cannot meet 1kHz threshold).test/test-rosidl-message-generator.js— SkipGenerate message at runtimeon Windows (shells throughbash+local_setup.sh). SkipTesting mrpt_msgs/msg/GraphSlamAgentson Windows (mrpt_msgsunavailable in Windows Jazzy environment).test/test-serialization.js— Skipstd_msgs/msg/MultiArrayDimensionserialization round-trip on Windows (inconsistent deserialization behavior).test/test-type-description-service.js— SkipTest type description service configured by parameterandTest start_type_description_service parameter valueon Windows (ROS CLIros2 paramcommands brittle/hanging; main service test unaffected).Fix: #1436